package org.bitmap.mm.util;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;

/**
 * 图片工具类
 * @author hljdrl
 */
public final class BitmapUtils {

	// 压缩图片
	public final static Bitmap compressImage(Bitmap image, int size) {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法，这里100表示不压缩，把压缩后的数据存放到baos中
		int options = 100;
		while (baos.toByteArray().length / 1024 > size) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
			baos.reset();// 重置baos即清空baos
			options -= 10;// 每次都减少10
			image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%，把压缩后的数据存放到baos中
		}
		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中
		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片
		return bitmap;
	}
	
	
	/**
	 * 缩放到指定宽高的图片
	 * @param path
	 * @param nwidth
	 * @param nheigh
	 * @return
	 */
	public static Bitmap getBitmap(String path, int nwidth, int nheigh) {
		Bitmap bitMap = BitmapFactory.decodeFile(path);
		int objwidth = bitMap.getWidth();
		int objheight = bitMap.getHeight();
		// 计算缩放比例
		float scaleWidth = ((float) nwidth) / objwidth;
		float scaleHeight = ((float) nheigh) / objheight;
		// 取得想要缩放的matrix参数
		Matrix matrix = new Matrix();
		matrix.postScale(scaleWidth, scaleHeight);
		// 得到新的图片
		bitMap = Bitmap
				.createBitmap(bitMap, 0, 0, nwidth, nheigh, matrix, true);
		return bitMap;
	}

}
